#!/usr/bin/env bash
# ******************************************************
# Filename     : redis-7.4-docker-install.sh
# Last modified: 2024-12-17 12:18
# Version      :
# Author       : jack.zang
# Email        : jack_zang@126.com
# Description  :
# curl -sfL https://gitee.com/jack_zang/public-scripts/raw/master/shell/redis/redis-7.4-docker-install.sh | REDIS_PASS="Xiodi.cn123" sh -s -
#
# ******************************************************

cat > /etc/sysctl.conf <<EOF
vm.overcommit_memory = 1
EOF

mkdir /data/redis-server -pv
cat > /data/redis-server/redis.conf <<EOF
# 绑定 IP 地址
bind 0.0.0.0

# 监听端口
port 6379

# 设置访问密码
requirepass ${REDIS_PASS}

# 客户端超时时间，单位为秒，0表示禁用超时功能
timeout 300

# 日志级别，可以选择 debug, verbose, notice, warning
loglevel notice

# 数据目录
dir /data

# 设置最大可用内存，根据服务器情况调整，例如 "maxmemory 2gb"
maxmemory 2gb

# 当达到最大内存限制时的淘汰策略
maxmemory-policy allkeys-lru

# 开启慢查询日志，threshold 是以微秒为单位的时间，超过此时间的查询会被记录
slowlog-log-slower-than 10000

# 慢查询日志的最大条目数
slowlog-max-len 128

# RDB 持久化配置，可根据需求调整快照频率
save 900 1
save 300 10
save 60 10000

# AOF 持久化配置，建议开启以提高数据安全性
appendonly yes
appendfilename "appendonly.aof"
# AOF 重写触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# AOF 文件同步策略，可选 always, everysec, no
appendfsync everysec

# TCP backlog 大小，默认511已经足够大了
tcp-backlog 511

# 最大客户端连接数，根据服务器性能和预期负载调整
maxclients 10000

# 是否启用集群模式，如需使用 Redis Cluster 则开启
cluster-enabled no

# 如果启用了集群模式，则指定节点配置文件的位置
# cluster-config-file nodes-6379.conf

# 是否开启 Lua 脚本的调用限制，防止脚本长时间运行阻塞 Redis
lua-time-limit 5000

# 是否开启 Redis 的通知系统
notify-keyspace-events ""

# 禁止对危险命令的访问，比如 FLUSHALL 和 FLUSHDB
rename-command FLUSHALL ""
rename-command FLUSHDB ""
EOF

docker run --name saas-redis --restart=always -d -p 6379:6379 \
    -v /data/redis-server:/data \
    redis:7.4 redis-server /data/redis.conf







